package com.test.aop;

/**
 * TruePointcut类实现了Pointcut接口，用于定义一个特殊的切点：
 * 该切点匹配所有的类和方法，常用于AOP（面向切面编程）中。
 * TruePointcut作为一个单例实现，确保了在系统中只有一个实例。
 */
public class TruePointcut implements Pointcut{

    // TruePointcut的单例实例，供外部使用。
    public static TruePointcut INSTANCE = new TruePointcut();

    // 私有构造方法，防止外部实例化。
    private TruePointcut() {
    }

    /**
     * 用于序列化反序列化时确保获取的是单例对象。
     * @return 返回TruePointcut的单例实例。
     */
    private Object readResolve() {
        return INSTANCE;
    }

    /**
     * 获取类过滤器。
     * TruePointcut使用的是始终返回真的类过滤器，
     * 表示匹配所有的类。
     * @return 返回一个始终返回真的ClassFilter对象。
     */
    @Override
    public ClassFilter getClassFilter() {
        return ClassFilter.TRUE;
    }

    /**
     * 获取方法匹配器。
     * TruePointcut使用的是始终返回真的方法匹配器，
     * 表示匹配所有的方法。
     * @return 返回一个始终返回真的MethodMatcher对象。
     */
    @Override
    public MethodMatcher getMethodMatcher() {
        return MethodMatcher.TRUE;
    }
}
